package br.com.pfc.application.controller.atendimentos;

import br.com.pfc.application.controller.BaseController;
import br.com.pfc.application.dao.AtendimentoDAO;
import br.com.pfc.application.service.atendimentos.AtendimentoService;
import br.com.pfc.model.Atendimento;
import br.com.pfc.model.Local;
import br.com.pfc.model.Usuario;
import java.text.ParseException;
import java.util.List;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import org.apache.commons.lang.StringUtils;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;

/**
 *
 * @author Vanda
 */
@Scope(ScopeType.CONVERSATION)
@Name("atendimentoPesquisarAction")
public class AtendimentoPesquisarController extends BaseController {

    @In
    AtendimentoDAO atendimentoDAO;
    @In
    AtendimentoService atendimentoService;
    private String paramDataInicial;
    private String paramDataFinal;
    private Integer paramStatus;
    private String paramUsuarioAtendimento;
    private String paramLocalAtendimento;
    private String localSelecionado;
    private String usuarioSelecionado;
    private List<Local> listaLocais;
    private List<Usuario> listaUsuarios;
    private DataModel listaAtendimentos;

    public DataModel getListaAtendimentos() throws ParseException {

        List<Atendimento> resultadoPesquisa;
        if (paramStatus != null) {
            resultadoPesquisa = atendimentoDAO.pesquisaPorStatus(paramStatus);
        } else if (paramLocalAtendimento != null) {
            resultadoPesquisa = atendimentoDAO.pesquisaPorUsuario(paramUsuarioAtendimento);
        } else if (paramUsuarioAtendimento != null) {
            resultadoPesquisa = atendimentoDAO.pesquisaPorLocal(paramLocalAtendimento);
        } else if (false) {
            resultadoPesquisa = atendimentoDAO.pesquisaPorPeriodo(paramDataInicial, paramDataFinal);
        } else {
            resultadoPesquisa = atendimentoDAO.pesquisar();
        }

        listaAtendimentos = new ListDataModel(resultadoPesquisa);

        return listaAtendimentos;

    }

    public void setListaAtendimentos(DataModel listaAtendimentos) {
        this.listaAtendimentos = listaAtendimentos;
    }

    public String setup() {
        listaLocais = atendimentoService.obterLocais();
        listaUsuarios = atendimentoService.obterUsuariosAbertura();
        localSelecionado = null;
        usuarioSelecionado = null;
        return "atendimentos";
    }

    public DataModel pesquisar() throws ParseException {
        List<Atendimento> resultadoPesquisa;
        if (paramStatus != null) {
            resultadoPesquisa = atendimentoDAO.pesquisaPorStatus(paramStatus);
        } else if (paramLocalAtendimento != null) {
            resultadoPesquisa = atendimentoDAO.pesquisaPorUsuario(paramUsuarioAtendimento);
        } else if (paramUsuarioAtendimento != null) {
            resultadoPesquisa = atendimentoDAO.pesquisaPorLocal(paramLocalAtendimento);
        } else if (StringUtils.isNotEmpty(paramDataInicial) && StringUtils.isNotEmpty(paramDataFinal)) {
            resultadoPesquisa = atendimentoDAO.pesquisaPorPeriodo(paramDataInicial, paramDataFinal);
        } else {
            resultadoPesquisa = atendimentoDAO.pesquisar();
        }


        listaAtendimentos = new ListDataModel(resultadoPesquisa);

        if (resultadoPesquisa.size() == 0) {
            adicionarMensagemInformacao("Não foram encontrados resultados.");
        } else {
            adicionarMensagemInformacao("Foram encontrados " + resultadoPesquisa.size() + " atendimentos.");
        }

        return listaAtendimentos;
    }

    public List<Local> getLocais() {
        return listaLocais;
    }

    public void setLocais(List<Local> locais) {
        this.listaLocais = locais;
    }

    public List<Usuario> getListaUsuarios() {
        return listaUsuarios;
    }

    public void setListaUsuarios(List<Usuario> listaUsuarios) {
        this.listaUsuarios = listaUsuarios;
    }

    public String getUsuarioSelecionado() {
        return usuarioSelecionado;
    }

    public void setUsuarioSelecionado(String usuarioSelecionado) {
        this.usuarioSelecionado = usuarioSelecionado;
    }

    public Integer getParamStatus() {
        return paramStatus;
    }

    public void setParamStatus(Integer paramStatus) {
        this.paramStatus = paramStatus;
    }

    public List<Local> getListaLocais() {
        return listaLocais;
    }

    public void setListaLocais(List<Local> listaLocais) {
        this.listaLocais = listaLocais;
    }

    public String getLocalSelecionado() {
        return localSelecionado;
    }

    public void setLocalSelecionado(String localSelecionado) {
        this.localSelecionado = localSelecionado;
    }

    public String getParamLocalAtendimento() {
        return paramLocalAtendimento;
    }

    public void setParamLocalAtendimento(String paramLocalAtendimento) {
        this.paramLocalAtendimento = paramLocalAtendimento;
    }

    public String getParamUsuarioAtendimento() {
        return paramUsuarioAtendimento;
    }

    public void setParamUsuarioAtendimento(String paramUsuarioAtendimento) {
        this.paramUsuarioAtendimento = paramUsuarioAtendimento;
    }

    public String getParamDataFinal() {
        return paramDataFinal;
    }

    public void setParamDataFinal(String paramDataFinal) {
        this.paramDataFinal = paramDataFinal;
    }

    public String getParamDataInicial() {
        return paramDataInicial;
    }

    public void setParamDataInicial(String paramDataInicial) {
        this.paramDataInicial = paramDataInicial;
    }
}
